package it.traveldream.entities;

import it.traveldream.entities.ProdottoAcquistabile;
import it.traveldreamClient.beans.dto.AlloggioDTO;
import it.traveldreamClient.beans.dto.EscursioneDTO;
import it.traveldreamClient.beans.dto.PkgDTO;

import java.io.Serializable;
import java.lang.String;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import javax.persistence.*;

/**
 * Entity implementation class for Entity: Pacchetto
 *
 */
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Pacchetto extends ProdottoAcquistabile implements Serializable {

	@Column(nullable = false)
	private String Nome;
	
	private String Descrizione;
	private static final long serialVersionUID = 1L;


	@ManyToMany( fetch=FetchType.EAGER)
    @JoinTable(name="PKG_ESC",
            joinColumns=
            @JoinColumn(name="idPKG", referencedColumnName="idProdotto"),
      inverseJoinColumns=
            @JoinColumn(name="idESC", referencedColumnName="idProdotto")
    )
	private List<Escursione> escursioni;


	@OneToOne(optional=false)
    @JoinColumn(
        name="idAndata", nullable=false, updatable=true)
	private Trasporto Andata;
	
	@OneToOne(optional=false)
    @JoinColumn(
        name="idRitorno", nullable=false, updatable=true)
	private Trasporto Ritorno;
	
	@OneToOne(optional=true)
    @JoinColumn(
        name="idAlloggio", nullable=true, updatable=true)
	private Alloggio Alloggio;
	
	  
	
	public Pacchetto() {
		super();
	}   
	
	

	public Pacchetto(PkgDTO pkg){
		this.Nome=pkg.getNome();
		this.Descrizione=pkg.getDescrizione();
		this.Prezzo=Integer.parseInt(pkg.getPrezzo());
		//this.setDisponibilita(true);
	}
	
	public String getNome() {
		return this.Nome;
	}

	public void setNome(String Nome) {
		this.Nome = Nome;
	}   
	public String getDescrizione() {
		return this.Descrizione;
	}

	public void setDescrizione(String Descrizione) {
		this.Descrizione = Descrizione;
	}



	public List<Escursione> getEscursioni() {
		return escursioni;
	}



	public void setEscursioni(ArrayList<Escursione> escursioni) {
		this.escursioni = escursioni;
	}



	public Trasporto getAndata() {
		return Andata;
	}



	public void setAndata(Trasporto andata) {
		Andata = andata;
	}



	public Trasporto getRitorno() {
		return Ritorno;
	}



	public void setEscursioni(List<Escursione> escursioni) {
		this.escursioni = escursioni;
	}



	public void setRitorno(Trasporto ritorno) {
		Ritorno = ritorno;
	}



	public Alloggio getAlloggio() {
		return Alloggio;
	}



	public void setAlloggio(Alloggio alloggio) {
		Alloggio = alloggio;
	}
   
	
	public PkgDTO getDTO(){
		PkgDTO pk= new PkgDTO();
		
		pk.setDescrizione(this.getDescrizione());
		
		if(getAlloggio()==(null))
			pk.setAlloggio(null);
		else
			pk.setAlloggio(this.getAlloggio().getDTO());
		
		pk.setAndata(this.getAndata().getDTO());
		
		ArrayList<EscursioneDTO> tmp = new ArrayList<>();
		
		for(Escursione e: this.escursioni)
			tmp.add(e.getDTO());
		
		pk.setEscursioni(tmp);
		
		pk.setRitorno(this.getRitorno().getDTO());
		pk.setNome(this.getNome());
		pk.setPrezzo(this.getPrezzo().toString());
		
		pk.setIdPacc(getIdProdotto());
		return pk;
	}
	
	public String toStringPacchetto(){
		
		String tmp= new String(this.getDescrizione() + " " + this.idProdotto + " " + this.Nome +" " +
				this.getAlloggio().getIdProdotto() + " " + this.getAndata().getIdProdotto() + " "+ 
				this.getRitorno().getIdProdotto());
		
		String r= new String();
		for(Escursione e: this.getEscursioni())
			r.concat(e.getIdProdotto());
		tmp.concat(r);
		
		return tmp;
		
		
	}
	
}
